package com.jie.client.service.ui.view;

import com.jie.client.core.ClientApplication;
import com.jie.client.core.handler.ClientWriteHandler;
import com.jie.client.service.entity.model.User;
import com.jie.client.service.ui.constant.ViewMapConstant;
import com.jie.client.service.ui.util.AlertUtil;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import java.util.HashMap;
import java.util.Map;

/**
 * @author XieZhiJie
 * @date 2022/04/27 17:05
 */
public class LoginView {

    /**
     * 用户帐号信息
     */
    private TextField tUserAccount;

    /**
     * 用户密码信息
     */
    private PasswordField tPassword;

    /**
     * 获取登录Scene
     * @return 返回登录Scene
     */
    public Scene getLoginScene() {
        // 初始化登录窗口信息
        this.tUserAccount = new TextField();
        this.tPassword = new PasswordField();

        // 网格布局
        GridPane loginRoot = new GridPane();

        // 显示框(显示"用户名"和"密码")(display)
        Text dUsername = new Text("用户名:");
        Text dPassword = new Text("密码:");

        // 设置输入框大小
        this.tUserAccount.setPrefWidth(200);
        this.tPassword.setPrefWidth(200);

        // 登录按钮
        Button loginButton = new Button("登录");
        // 给按钮添加事件
        loginButton.setOnAction(event -> onLoginAction());

        // 注册输入框信息
        Button registerButton = new Button("注册");
        // 给按钮添加事件
        registerButton.setOnAction(event -> onOpenRegisterAction());

        // 设置控件位置
        loginRoot.add(dUsername, 0, 0);
        loginRoot.add(this.tUserAccount, 1, 0);
        loginRoot.add(dPassword, 0, 1);
        loginRoot.add(this.tPassword, 1, 1);
        loginRoot.add(registerButton, 0,2);
        loginRoot.add(loginButton, 1, 2);

        //设置单独组件(登录按钮)的上下左右的间距
        GridPane.setMargin(loginButton, new Insets(0,0,0,150));

        // 设置其它东西
        loginRoot.setAlignment(Pos.CENTER);
        //设置垂直间距
        loginRoot.setVgap(10);
        //设置水平间距
        loginRoot.setHgap(5);

        // 登录窗口
        return new Scene(loginRoot, 500, 300);
    }

    /**
     * 点击登录处理
     */
    private void onLoginAction() {
        User user = new User();
        String empty = "";
        if (empty.equals(this.tUserAccount.getText().trim()) || empty.equals(this.tPassword.getText().trim())) {
            AlertUtil.warn("输入信息不能为空!");
            return;
        }
        user.setUserAccount(this.tUserAccount.getText().trim());
        user.setUserPassword(this.tPassword.getText().trim());
        // 封装请求信息
        Map<String, Object> map = new HashMap<>(16);
        map.put("choice", "login");
        map.put("user", user);
        ClientWriteHandler.sendRequest(map);
    }

    /**
     * 点击注册处理
     */
    private void onOpenRegisterAction() {
        // 打开注册页面
        Stage primaryStage = (Stage) ClientApplication.VIEW_MAP.get(ViewMapConstant.MAIN_STAGE);
        primaryStage.setScene(new RegisterView().getRegisterView());
        primaryStage.setTitle("注册");
        primaryStage.show();
    }

}
